Technical Q&A QA1282
Using a QuickTime time base callback to detect when a movie has stopped


Q: callBackAtExtremes ÇΔ triggerAtStop Ç…ÇÊÇÈ NewCallBack ÇégǡǃÅAÉÄÅ[ÉrÅ[ǙǢǬçƒê∂Çí‚é~ǵÇΩÇ©ÇåüèoǵÇÊǧÇΔǵǃǢNjÇ∑Ç™ÅAQuickTime ÇÃÉhÉLÉÖÉÅÉìÉgÇ…ÇÕÅADZÇÍÇÁÇÃÉtÉâÉOÇãÔëÃìIDžǫDZÇ≈ê›íËǵÇΩÇÁÇÊǢǩDžǬǢǃãLèqÇ≥ÇÍǃǢNjÇπÇÒÅBégópÇ∑ÇÈÉtÉâÉOÇ…ÇÊǡǃÇÕÅANewCallBack ÇÕ NULL Çï‘Ç∑DZÇΔǙdžÇËÇ‹Ç∑ÅBcallBackAtExtremes ÇΔ triggerAtStop ÇégÇ¡ÇΩÉRÅ[ÉãÉoÉbÉNä÷êîÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈÇ…ÇÕǫǧǵÇΩÇÁÇÊÇ¢ÇÃÇ≈ǵÇÂǧǩÅB

A: triggerAtStop ÇÕÅAcallBackAtExtremes Ç™ NewCallBack Ç÷Çà cbType ÉtÉâÉOÇΔǵǃégÇÌÇÍÇΩÇΔÇ´Ç… param1 ÉpÉâÉÅÅ[É^ÇΔǵǃ CallMeWhen API Ç…ìnÇ≥ÇÍÇÈÉtÉâÉOÇ≈Ç∑ÅBÉäÉXÉg 1 Ç…ÅADZÇÍÇê›íËÇ∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB

ÉäÉXÉg 1.

// CallMeWhen Ç…ÇÊǡǃÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈîƒópÉRÅ[ÉãÉoÉbÉNä÷êî
// pascal void MyQTCallBackProc(QTCallBack cb, long refCon);

pascal void MyDoSomethingCallBack(QTCallBack cb, long refCon)
{
    MyAppDataPtr myStuff;

    if (NULL == refCon) return;
    myStuff = (MyAppDataPtr)refCon;
    myStuff->didSomething = true;

    return;
}

// callBackAtExtremes ÉtÉâÉOÇΔ triggerAtStop ÉtÉâÉOÇ≈ãNìÆÇ∑ÇÈ
// ÉRÅ[ÉãÉoÉbÉNÇÃÉZÉbÉgÉAÉbÉv
// MyDoSomethingCallBack ä÷êîÇÕÅAäÓèÄéûä‘é≤Ç™í‚é~Ç∑ÇÈÇΔ
// åƒÇ—èoÇ≥ÇÍÇÈ

OSErr SetUpTriggerAtStopCallBack(MyAppDataPtr inAppData)
{
    QTCallBack    theQTCallBack;
    QTCallBackUPP theCallBackUPP;

    OSErr err = paramErr;

    theQTCallBack = NewCallBack(GetMovieTimeBase(inAppData->myMovie),
                                callBackAtExtremes);
    if (theQTCallBack) {
        theCallBackUPP = NewQTCallBackUPP(MyDoSomethingCallBack);
        err = CallMeWhen(theQTCallBack, theCallBackUPP,
                         inAppData, triggerAtStop, 0, 0);
    }

// džÇΔÇ≈ìnÇπÇÈÇÊǧDžDZÇÍÇÁÇï€ë∂
    inAppData->myQTCallBack = theQTCallBack;
    inAppData->myCallBackUPP = theCallBackUPP;

return err;
}

QTCallBack ÇΔ QTCallBackUPP ÇÃèàóùÇ™èIÇÌÇ¡ÇΩÇÁÅADisposeCallBack ÇΔ DisposeQTCallBackUPP ÇÃåƒÇ—èoǵÇñYÇÍÇ∏Ç…çsǡǃÇ≠ÇæÇ≥Ç¢ÅB

éQçléëóøÅF


[2003 îN 8 åé 12 ì˙]